package generics;

/**
 * Created with IntelliJ IDEA
 * Description：范型的语法特性
 * User：chenshu
 * Date：2023-10-26
 * Time：19:20
 */
class MyArray<T> {
    //写法一(编译通过但是不好)：
    public T[] array =(T[])new Object[10];

    //写法二(编译无法通过)：既然编译的时候把T替换成了Object，那么这里为什么报错，这里最大的问题是数组
    //public T[] array = new T[10];

    public T getPos(int pos) {
        return array[pos];
    }

    public void setPos(int pos, T val) {
        array[pos] = val;
    }

    public T[] getArray() {
        return array;
    }
}
public class TestDemo {
    public static void main(String[] args) {
        MyArray<Integer> myArray = new MyArray<>();

        //Java不会允许Object的数组，向下转型成其他类型数组
        //Integer[] ret = myArray.getArray();

    }
    public static void main1(String[] args) {
        /**
         * 1、泛型在编译期间做了2件事!!!!!：
         *  1.1、存放元素的时候进行类型的检查
         *  1.2、取元素的时候，帮我进行类型的转换
         * 2、<引用类型> -> 不能用int】
         * 3、擦除机制->编译的时候全都变成Object类
         */
        MyArray<Integer> myArray = new MyArray<>();
        myArray.setPos(0, 1);
        myArray.setPos(1, 2);
        Integer ret = myArray.getPos(1);
        System.out.println(ret);
    }
}
